/**
 * 
 */
package br.com.ctm.guiamedico.bean;

import java.util.ArrayList;
import java.util.List;

import javax.enterprise.context.ConversationScoped;
import javax.faces.event.ActionEvent;
import javax.inject.Inject;
import javax.inject.Named;

import br.com.ctm.guiamedico.dao.api.HospitalDao;
import br.com.ctm.guiamedico.model.Bairro;
import br.com.ctm.guiamedico.model.Cidade;
import br.com.ctm.guiamedico.model.Endereco;
import br.com.ctm.guiamedico.model.Hospital;
import br.com.ctm.guiamedico.model.Uf;
import br.com.ctm.guiamedico.negocio.api.BairroNegocio;
import br.com.ctm.guiamedico.negocio.api.CidadeNegocio;
import br.com.ctm.guiamedico.negocio.api.HospitalNegocio;
import br.com.ctm.guiamedico.negocio.api.UfNegocio;
import br.com.framework.apresentacao.bean.CRUDBean;
import br.com.framework.persistencia.sort.Order;

/**
 * @author Cleber
 *
 */
@Named
@ConversationScoped
public class HospitalBean extends CRUDBean<Hospital, HospitalDao, HospitalNegocio>{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	@Inject
	private UfNegocio ufNegocio;
	
	@Inject
	private CidadeNegocio cidadeNegocio;
	
	@Inject
	private BairroNegocio bairroNegocio;
	
	private List<Uf> ufs;
	
	private Uf selectedUf;
	
	private List<Cidade> cidades;
	
	private Cidade selectedCidade;
	
	private List<Bairro> bairros;
	
	private Endereco endereco;
	
	/**
	 * @param entidadeClass
	 */
	public HospitalBean() {
		super(Hospital.class);
	}

	@Inject
	protected void setNegocio(HospitalNegocio negocio) {
		super.setNegocio(negocio);
	}
	
	/**
	 * @return the ufs
	 */
	public List<Uf> getUfs() {
		return ufs;
	}

	/**
	 * @param ufs the ufs to set
	 */
	public void setUfs(List<Uf> ufs) {
		this.ufs = ufs;
	}

	/**
	 * @return the cidades
	 */
	public List<Cidade> getCidades() {
		return cidades;
	}

	/**
	 * @param cidades the cidades to set
	 */
	public void setCidades(List<Cidade> cidades) {
		this.cidades = cidades;
	}

	/**
	 * @return the selectedUf
	 */
	public Uf getSelectedUf() {
		return selectedUf;
	}

	/**
	 * @param selectedUf the selectedUf to set
	 */
	public void setSelectedUf(Uf selectedUf) {
		this.selectedUf = selectedUf;
	}
	
	/**
	 * @return the selectedCidade
	 */
	public Cidade getSelectedCidade() {
		return selectedCidade;
	}

	/**
	 * @param selectedCidade the selectedCidade to set
	 */
	public void setSelectedCidade(Cidade selectedCidade) {
		this.selectedCidade = selectedCidade;
	}

	/**
	 * @return the bairros
	 */
	public List<Bairro> getBairros() {
		return bairros;
	}

	/**
	 * @param bairros the bairros to set
	 */
	public void setBairros(List<Bairro> bairros) {
		this.bairros = bairros;
	}
	
	/**
	 * @return the endereco
	 */
	public Endereco getEndereco() {
		return endereco;
	}

	/**
	 * @param endereco the endereco to set
	 */
	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	/**
	 * Metodo executado ao mudar o select de Ufs
	 */
	public void handleUfChange() {
		if (selectedUf != null) {
			Cidade ex = new Cidade();
			ex.setUf(selectedUf);
			cidades = cidadeNegocio.findByExample(ex, "nome", Order.ASCENDING);
		} else {
			cidades = new ArrayList<Cidade>();
		}
	}
	
	/**
	 * Metodo executado ao mudar o select de Cidades
	 */
	public void handleCidadeChange() {
		if (selectedCidade != null) {
			Bairro ex = new Bairro();
			ex.setCidade(selectedCidade);
			bairros = bairroNegocio.findByExample(ex, "nome", Order.ASCENDING);
		} else {
			bairros = new ArrayList<Bairro>();
		}
	}
	
	public void incluirEndereco() {
		endereco = new Endereco();
	}
	
	public void salvarEndereco() {
		if (getEntidade().getEnderecos() == null) {
			getEntidade().setEnderecos(new ArrayList<Endereco>());
		}
		if (!getEntidade().getEnderecos().contains(endereco)) {
			getEntidade().getEnderecos().add(endereco);
		}
		
	}

}
